From: Florian Müllner Date: Fri, 7 Oct 2011 18:17:44 +0000 (+0200) Subject: popup-menu: Add minimal handling of open/close to Sections X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~7348 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=398489f66156aee753c3658b918533d06b517da3;p=gnome-shell.git popup-menu: Add minimal handling of open/close to Sections SubMenuMenuItems close automatically with their parent, however closing fails when the parent item is a MenuSection, as those currently ignore any open()/close() requests. At some minimal handling by emitting the 'open-state-changed' signal, so children like SubMenuMenuItems work as expected. https://bugzilla.gnome.org/show_bug.cgi?id=661029 --- diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index 2b5a3d9f8..e5e992174 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -1019,6 +1019,11 @@ PopupMenuBase.prototype = { } if (menuItem instanceof PopupMenuSection) { this._connectSubMenuSignals(menuItem, menuItem); + menuItem._closingId = this.connect('open-state-changed', + function(self, open) { + if (!open) + menuItem.close(false); + }); menuItem.connect('destroy', Lang.bind(this, function() { menuItem.disconnect(menuItem._subMenuActivateId); menuItem.disconnect(menuItem._subMenuActiveChangeId); @@ -1418,9 +1423,10 @@ PopupMenuSection.prototype = { this.isOpen = true; }, - // deliberately ignore any attempt to open() or close() - open: function(animate) { }, - close: function() { }, + // deliberately ignore any attempt to open() or close(), but emit the + // corresponding signal so children can still pick it up + open: function(animate) { this.emit('open-state-changed', true); }, + close: function() { this.emit('open-state-changed', false); }, } function PopupSubMenuMenuItem() {